package com.jm.programming.optional;

import com.jm.programming.stream.pojo.Author;
import com.jm.programming.stream.utils.CreateDataUtil;

import java.util.List;
import java.util.Optional;

/**
 * @Description
 * @date 2022/7/7 14:34
 */
public class OptionalTest {
    public static void main(String[] args) {

    }

    static void getAuthorName(){
        // 创建Optional对象
        Optional<Author> author = Optional.ofNullable(getNullAuthor());

        // 保证数据不为空 创建 Optional 对象
        Optional<Author> author1 = Optional.of(getAuthor());

        // 创建空的 Optional 对象
        Optional<Author> author2 = Optional.empty();

        // 不安全获取，如果数据为空抛出异常
        author.get();

        // 安全获取：数据为空，根据传入参数返回
        Author author4 = author.orElseGet(() -> new Author());

        // 安全获取：数据为空，抛出指定异常
        author.orElseThrow(()-> new RuntimeException("抛出异常"));

        // 安全消费
        author.ifPresent(author3 -> System.out.println(author3));

        // 数据过滤
        author.filter(author3 -> author3.getAge() > 20)
                .ifPresent(author5 -> System.out.println(author5));

        // 判断是否有数据
        boolean present = author.isPresent();

        // 数据转换
        author.map(author3 -> author3.getBooks())
                .ifPresent(System.out::println);
    }

    /**
     * 创建对象
     * @return
     */
    static Author getAuthor(){
        return new Author();
    }

    /**
     * 模拟创建空对象
     * @return
     */
    static Author getNullAuthor(){
        return null;
    }


}
